#include <iostream>
using namespace std;

void func(int& val) { cout << "左值引用" << endl; }
void func(const int& val) { cout << "const 左值引用" << endl; }
void func(int&& val) { cout << "右值引用" << endl; }
void func(const int&& val) { cout << "const 右值引用" << endl; }

template<class T>
void PrefectForward(T&& val)
{
    // 期望保持实参的属性
    func(forward<T>(val));
}

int main()
{

    PrefectForward(10); // 右值
    int a;
    PrefectForward(a); // 左值
    const int b = 1;
    PrefectForward(b); // const左值
    PrefectForward(move(b)); // const右值
    return 0;
}